package main

import (
	"fmt"
)

var score = 2
var passwd string
var p * int = &score
func main(){

	//密码长度验证
	passwd_len(&score)
	//不能有长度超过或等于3的子串重复
	repeat_str(passwd, &score)
	//大写小写字母数字其他符号，以上四种至少有三种
	check_kind(passwd,&score)
	//返回密码分数，要改进的点
	fmt.Println(score)
}

//密码长度验证
func passwd_len(p * int){
	fmt.Println("please input your passwd:")
	fmt.Scan(&passwd)
	if len(passwd) <= 8{
		fmt.Println("你的密码长度小于8")
		score --
	}else{
		score ++
	}


}
//不能有长度超过或等于3的子串重复
func repeat_str(passwd string, p * int )  {
	var i int
	var j int
	var c int
	c = 0
	for i=0 ; i<len(passwd)-3 ; i++{
		for j=1 ;j<len(passwd)-3;j++{
			if passwd[i:i+3] == passwd[j:j+3]{
				fmt.Println("有长度超过或等于3的子串重复")
				c = 1

				break
			}else {


			}
		}
		if c == 1 {
			score --
			break
		}
	}
}
//密码包括大写字母小写字母数字其他符号，至少三种

func check_kind(passwd string,p * int) {
	var flag1 int = 0
	var flag2 int = 0
	var flag3 int = 0
	var flag4 int =0
	for i :=0; i < len(passwd); i++ {
		switch {
		case 64 < passwd[i] && passwd[i] < 91:
			flag1 = 1
			//fmt.Println("有大写字母")
		case 96 < passwd[i] && passwd[i] < 123:
			flag2 = 1
			//fmt.Println("有小写字母")
		case 47 < passwd[i] && passwd[i] < 58:
			flag3 = 1
			//fmt.Println("有数字")
		default:
			flag4 = 1
			//fmt.Println("有其他字符")
		}
	}
	if flag1 == 1 && flag2 == 1 && flag3==1{
		fmt.Println("包括大写字母小写字母数字")
		score ++
	}else if flag1 == 1 && flag2 == 1 && flag4 == 1{
		fmt.Println("包括大写字母小写字母数字")
		score ++
	}else if flag1 == 1 && flag3==1 && flag4 == 1{
		fmt.Println("包括大写字母小写字母数字")
		score ++
	}else if flag2 == 1 && flag3==1 && flag4 == 1 {
		fmt.Println("包括大写字母小写字母数字")
		score++
	}else if flag2 == 1 && flag3==1 && flag4 == 1 && flag4 == 1{
		fmt.Println("包括大写字母小写字母数字")
		score++
	}

}





